#ifndef TASK_QUE_H
#define TASK_QUE_H


/**multask.h*/
#include "dsctbl.h"

struct CQUEUE ;

typedef struct  {
	int backlink, esp0, ss0, esp1, ss1, esp2, ss2, cr3;
	int eip, eflags, eax, ecx, edx, ebx, esp, ebp, esi, edi;
	int es, cs, ss, ds, fs, gs;
	int ldtr, iomap;
	}TSS32;


#define MAX_TASKSIZE 100
#define MAX_TASKLEVELS 10
#define TASK_GDT0 3//任务分配时的初始gdt段号 ，0，1,2已经被使用


	typedef struct { 
		char * buf ;
		int size ; 
		int pos ; //位置
	}FILE_HANDLER;

	typedef struct  {
		int gdtid ,  flags ;
		int level ;  //所属级别
		int priority  ; //优先级，实际上为运行时间 1表示0.01秒
		 TSS32 tss; 
		 struct CQUEUE *cq ;
		 SEGMENT_DESCRIPTOR ldt[2] ; //每个任务有2个ldt段
		 FILE_HANDLER * fhandler  ; //文件委托的数组
		 int * fat ; 

		 int cmd ; //cmd委托
	}TASK;


	typedef struct { 
		int running ; //正在运行的数量
		int now ;  //正在运行的task_id 
		TASK *tasks[MAX_TASKSIZE] ;
	} TASK_LEVEL ;

	typedef struct  {
		int lv_change ; //运行几个项目
		int now_lv ; //当前正在运行的lv是哪个
		TASK_LEVEL  tasklevels[MAX_TASKLEVELS] ; // active任务循环队列
		TASK tasks0[MAX_TASKSIZE] ;
	}TASK_MANAGEMENT;


	



/**dtstruct.h*/

#define QUE_SIZE 128

//struct  TASK ;

typedef struct {
	 unsigned char data ;
	 int code ;
} INTDATA; //中断数据


typedef struct { 
	INTDATA data[QUE_SIZE] ;
	int front ,rear ,length ;
	 TASK *task ; 
}CQUEUE; 


#endif   

	